/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DA;

import BE.BEInterface;
import BE.BEPerfil;
import BL.BLInterface;
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Hunter
 */
public class DAPerfil {
    
    public ArrayList<BEPerfil> cargarDatos()
    {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        String query = "Select * from perfil";
        ArrayList<BEPerfil> lstPerfil= new ArrayList<BEPerfil>();
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs=s.executeQuery(query);
            
            while (rs.next())
            {
                BEPerfil auxPerfil = new BEPerfil();
                auxPerfil.setIdPerfil(rs.getInt("IDPERFIL"));
                auxPerfil.setNombre(rs.getString("nombperfil"));
                auxPerfil.setDescripcion(rs.getString("descripcion"));
                auxPerfil.setEstado(rs.getString("estado"));
                lstPerfil.add(auxPerfil);
                       
            }
                       
            
  
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de acutializar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        for (BEPerfil p:lstPerfil) llenarInterfaces(p);
        
        return lstPerfil;
    }
    
    public String instertar(BEPerfil objPerfil) throws SQLException
    {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
       
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "INSERT INTO perfil( nombperfil, descripcion, estado)VALUES ( ?,?,?)";
            PreparedStatement p=con.prepareStatement(query);
            p.setString(1, objPerfil.getNombre());
            p.setString(2, objPerfil.getDescripcion());
            p.setString(3, objPerfil.getEstado());
            p.execute();
            
            
//            obtengo el id del perfil generado
            
            query = "SELECT MAX(idperfil) FROM perfil";
            p=con.prepareStatement(query);
            rs= p.executeQuery();

            int idPerfil=-1;

            while (rs.next())idPerfil= rs.getInt(1);
            

            
            //inserto

            for (BEInterface vent:objPerfil.getInterfacesMantenimiento())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, idPerfil);
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }

            for (BEInterface vent:objPerfil.getInterfacesProcesamiento())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, idPerfil);
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }

            for (BEInterface vent:objPerfil.getInterfacesReporte())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, idPerfil);
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }
            for (BEInterface vent:objPerfil.getInterfacesSeguridad())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, idPerfil);
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }

      


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return "No se pudo guardar el perfil en la base de datos";
        }
        bd.cierraConexion(con);
        
        return "Se guardo el perfil de forma exitosa en la base de datos";
        
        
    }

    public ArrayList<BEInterface> cargarInterfaces(String tipo) {

        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        String query = "Select * from interface";
        ArrayList<BEInterface> lstInterface= new ArrayList<BEInterface>();

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs=s.executeQuery(query);

            while (rs.next())
            {
                BEInterface auxInterface = new BEInterface();

                auxInterface.setIdInterface(rs.getInt("idinterface"));
                auxInterface.setNombre(rs.getString("nombre"));
                auxInterface.setTipo(rs.getString("tipo"));

                if (auxInterface.getTipo().contains(tipo)) lstInterface.add(auxInterface);

            }


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de acutializar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return lstInterface;

    }

    private void llenarInterfaces(BEPerfil p) {
        
        BLInterface objInterface= new BLInterface();
        objInterface.cargar();
        ArrayList<Integer> ventanas = obtenerVentanasInterface(p.getIdPerfil());
        
        for(Integer i: ventanas)
        {
            BEInterface aux=objInterface.buscarId(i);
            if (aux!=null)
            {
                if(aux.getTipo().equals("Mantenimientos")) p.getInterfacesMantenimiento().add(aux);
                if(aux.getTipo().equals("Procesamiento")) p.getInterfacesProcesamiento().add(aux);
                if(aux.getTipo().equals("Seguridad")) p.getInterfacesSeguridad().add(aux);
                if(aux.getTipo().equals("Reportes")) p.getInterfacesReporte().add(aux);
            }
            
            
            
        }
        
        
    }

    private ArrayList<Integer> obtenerVentanasInterface(int idPerfil) {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        ArrayList<Integer> lstVentanas= new ArrayList<Integer>();

        try
        {
            con = bd.conectar();
            String query = "Select idaccion from perfilxaccesos Where idperfil= ?";
            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, idPerfil);
            rs= p.executeQuery();

            while (rs.next())
            {
                Integer i = new Integer(rs.getInt("idaccion"));

                lstVentanas.add(i);

            }


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de acutializar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return lstVentanas;
        
    }

    public String actualizar(BEPerfil auxPerfil)
    {
        String aux=actualizarPerfil(auxPerfil);
        
        return aux;
    }

    private String actualizarPerfil(BEPerfil auxPerfil) {
         DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
       
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,auxPerfil.getIdPerfil(),"Error",JOptionPane.ERROR_MESSAGE);
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "UPDATE perfil  SET nombperfil=?, descripcion=?, estado=? WHERE idperfil=?";
            PreparedStatement p=con.prepareStatement(query);
            p.setString(1, auxPerfil.getNombre());
            p.setString(2, auxPerfil.getDescripcion());
            p.setString(3, auxPerfil.getEstado());
            p.setInt(4, auxPerfil.getIdPerfil());
            p.execute();
            
            
//            obtengo el id del perfil generado
            // JOptionPane.showMessageDialog(null,auxPerfil.getIdPerfil(),"Error",JOptionPane.ERROR_MESSAGE);
             query = "DELETE FROM perfilxaccesos WHERE idperfil=?";
             p=con.prepareStatement(query);
             p.setInt(1, auxPerfil.getIdPerfil());
             p.execute();

           
            //inserto

            for (BEInterface vent:auxPerfil.getInterfacesMantenimiento())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, auxPerfil.getIdPerfil());
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }

            for (BEInterface vent:auxPerfil.getInterfacesProcesamiento())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, auxPerfil.getIdPerfil());
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }

            for (BEInterface vent:auxPerfil.getInterfacesReporte())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, auxPerfil.getIdPerfil());
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }
            for (BEInterface vent:auxPerfil.getInterfacesSeguridad())
            {
                query = "INSERT INTO perfilxaccesos(idperfil, idaccion)VALUES (?, ?)";
                p=con.prepareStatement(query);
                p.setInt(1, auxPerfil.getIdPerfil());
                p.setInt(2, vent.getIdInterface());
                p.execute();
            }

      


        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return "No se pudo actualizar el perfil en la base de datos";
        }
        bd.cierraConexion(con);
        
        return "Se actualizo el perfil de forma exitosa en la base de datos";
    }

    private void actualizarInterfaces(BEPerfil auxPerfil) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    

}
